#pragma once

#include "slice.h"

namespace sfc::chr {

[[sfc_inline]] inline auto is_digit(char c) -> bool {
  return '0' <= c && c <= '9';
}

[[sfc_inline]] inline auto is_whitespace(char c) -> bool {
  return c == ' ' || ('\x09' <= c && c <= '\x0d');
};

[[sfc_inline]] inline auto memchr(slice::Slice<const char> s, char c) -> option::Option<usize> {
  const auto p = static_cast<const char*>(__builtin_memchr(s._ptr, c, s._len));
  return p == nullptr ? option::Option<usize>{} : static_cast<usize>(p - s._ptr);
}

}  // namespace sfc::chr
